3-1

PROGRAMMING 

Whether you compose music, dialogue or design special effects, your masterpieces are unfinished 

until they are arranged in a production. What could be more original than to enhance one of your 

own programs with sounds of your own creation?

The Introduction to this manual compared MOCKINGBOARD to the telephone of a friend you 

wish to call. MOCKINGBDARD may be reached with the appropriate "area code" and "phone 

number." The "area code" locates MOCKINGBOARD in one of the input/output slots in the 

back of the Apple. This means that MOCKINGBOARD may be placed in any slot, except 0. 

The Apple II Reference Manual states that this slot is reserved for RAM, ROM or interface 

expansion. 

The sound chip and speech chip do not speak the same language. Therefore, instructions to any 

chip must go through a translator. This translator is called the 6522 Versatile Interface Adapter or 

just 6522. There are only four instructions for the sound chips and one for the speech chips 

which must be translated. 

THE SOUND CHIPS 

The Sound Utility program demonstrated all the parameters needed to produce a sound. There 

are 16 in all: six Tone Period (Fine and Coarse), one Noise Period, one Enable, three Amplitude, 

two Envelope Period (Fine and Coarse), one Envelope Shape and two unused. When all 16 

parameter values are received by the sound chip via the 6522, sound is generated. 

With the Sound Utility, the cursor is positioned over one of the 14 parameters and a value is 

typed. For Example, if we wish to set the Tone Period (Fine Tune) for channel A to 145, the 

cursor is moved to the first row, column A, and 145 is typed in. A similar location called a 

register address, is also designated on the sound chip for this parameter. Each parameter has its 

own register address numbered 0 to 15. Table 3-1 shows each parameter and its associated 

register address. A chart of all registers and their descriptions is provided in Appendix B, page A-

3. 

3-2

REGISTER

ADDRESS SOUND PARAMETERS

0 Tone Period Fine Tune for channel A

1 Tone Period Coarse Tune for channel A

2 Tone Period Fine Tune for channel B

3 Tone Period Coarse Tune for channel B

4 Tone Period Fine Tune for channel C

5 Tone Period Coarse Tune for channel C

6 Noise Period

7 Enable

8 Amplitude for channel A

9 Amplitude for channel B

10 Amplitude for channel C

11 Envelope Period Fine Tune 

12 Envelope Period Coarse Tune 

13 Envelope Shape 

14 & 15 Unused 

Table 3-1 Sound Chip Registers

 

HOW THE SOUND PARAMETERS ARE SET ON THE CHIP 

A sample program called TABLE Access Routine, provided on the demonstration disk, 

illustrates one method of setting sound parameters on the chip. Let's use our earlier example and 

set the Tone Period Fine Tune for channel A to 145. Table 3-1 indicates that Tone Period Fine 

Tune for channel A is register address 0. The Table Access Routine is designed to send values to 

all sixteen registers sequentially, beginning with 0. It first sends MOCKINGBOARD the register 

address (0) of the data to be sent. Next, it sends MOCKINGBOARD the data (145). The Table 

Access Routine continues this process until all sixteen register addresses have been sent data. If a 

parameter does not need to be set, you should send a zero to that register address.

3-3

All information to MOCKINGBOARD flows on one of two direct lines. The first line sends 

only register addresses and data. But MOCKINGBOARD can not distinguish addresses from 

data, because the addresses and data are all numerical values. The second line is used to send an 

instruction identifying what was sent on the other line. Let's use our example to clarify the 

information flow to MOCKINGBOARD. When 0 is sent on the first line, the second line sends 

instructions to MOCKINGBOARD that the 0 is a register address. Next, 145 is sent on the first 

line and the instruction to MOCKINGBOARD that 145 is data, is sent on the second line. The 

two lines work almost simultaneously. In fact, information may be sent to MOCKINGBOARD 

continuously, because it flows in only one direction. 

A separate program called PRIMary Routines (also provided on the disk), contains the four 

subroutines to handle the instructions to MOCKINGBOARD. They are: 

INIT subroutine. Initializes or primes MOCKINGBOARD to receive information. The 

initialization process is done once at the beginning of a program. MOCKINGBOARD must be 

initialized or sound parameter s sent to it will be ignored. Your program will continue, but no 

sound will be generated. MOCKINGBOARD does not have to be initialized again during the 

same program, unless the computer is shut off or the system is reset.

LATCH subroutine. Tells MOCKINGBOARD that a register address is being sent to it. 

WRITE subroutine. Tells MOCKINGBOARD that data (a parameter value) is being sent. 

RESET subroutine. Clears all sixteen registers to zeros. As a precautionary measure, the registers 

should be RESET at the start of a program to avoid generation of unexpected sounds. 

These two programs, Table Access Routine and Primary Routines, work together to send the 

proper instructions and data to MOCKINGBOARD. The Table Access Routine orchestrates the 

task. While Primary Routines send instructions to MOCKINGBOARD, it is the Table Access 

Routine which selects the appropriate instruction to send. 

3-4

To understand the principles behind these two programs, let's examine what happens in a 

mailroom. The parallel between a mailroom and MOCKINGBOARD will clarify how 

MOCKINGBOARD transfers data for sound generation. 

mail The mail truck arrives each day at 9.00 am. The mail 

clerk is prepared to receive the mail at this time each day. 

MOCKINGBOARD CALL the INIT routine at the beginning of your program. 

This routine prepares MOCKINGBOARD to receive 

information. 

mail The mail is sorted into piles for each mail slot. Each mail slot 

belongs to a particular individual and is appropriately labelled. 

MOCKINGBOARD Each sound is described by I 6 sound parameters and 

those parameters correspond to a particular register on the

sound chip. The registers, numbered from 0 to 15,

correspond to the mail slots, Each sound parameter is assigned to a 

register just as a name on the mail associates it with a particular 

mail slot. The sound parameters are predetermined and stored in 

memory. 

mail Before the new mail is placed into the mail slots, each slot

is checked to make sure it is empty. 

MOCKINGBOARD The Table Access Routine RESETs (or clears) all 16 registers as a 

precaution against unwanted sounds. 

mail The mail is sorted in mail slot order and the slot door for

the first pile is opened. 

MOCKINGBOARD The Table Access Routine sends the register address to 

MOCKINGBOARD. It also tells the subroutine LATCH

(Primary Routines) to send instructions to MOCKING- 

BOARD to "latch" onto that register so the data will know 

where to go. 

mail The first pile is retrieved and placed in the opened mail slot. 

3-5

MOCKINGBOARD The Table Access Routine retrieves the data for the 

first register from its place in memory and sends it to

MOCKINGBOARD. It also tells the subroutine, WRITE 

(Primary Routines), to instruct MOCKINGBOARD to

place that data into the latched register. 

mail Each remaining pile of mail is processed in the same manner. The 

distribution of mail is completed when all the piles have been 

placed in their respective slots. 

MOCKINGBOARD The next register is latched and the corresponding data is 

written to that register. When al 16 registers are filled, 

MOCKINGBOARD will generate a sound and send it to

the speakers. 

LATCH and WRITE are similar to the standard BASIC programming command, POKE. The 

address is identified first, then the data to be poked. 

The data retrieval method used in the Table Access Routine is comparable to the standard 

programming commands, DATA and READ, where data is retrieved and read into the program 

for processing. 

SUMMARY OF PRIMARY ROUTINES AND TABLE ACCESS ROUTINE

The Primary Routines consist of four subroutines called INIT, LATCH, WRITE, and RESET. 

Each subroutine has a specific function in the transmission of instructions to 

MOCKINGBOARD. These subroutines utilize the instruction line to transmit information to 

MOCKINGBOARD. Each tells MOCKINGBOARD what to do with the information being 

transmitted on the address/data line. 

The Table Access Routine coordinates the flow of information to MOCKINGBOARD by 

sending information on the address/data line and selecting the appropriate Primary Routines 

instruction for the address/data sent. As the name of the line indicates, only a register address or 

data is transmitted on this line. 

The Table Access Routine also retrieves the data from a memory location where sound 

parameters are stored. The data can be POKEd into memory at a specific location by READing 

the data into your program with a Data statement. The data may be stored in any unused 

memory location, but the Table Access Routine must be told its location. 

3-6

The data is POKEd in register address order. Conveniently, the order is sequential. Therefore, the 

data for the first register is POKEd into the first address of the memory location, then the data 

for the second register is POKEd into the next consecutive address and so forth until all sixteen 

have been POKEd. If more than one set of sound parameters are needed, the next set of 

parameters may be stored immediately following the first set. When the second sound is to be 

played, the Table Access Routine must know where this set of sound parameters begin (start of 

first sound plus 16), The two sound chips on MOCKINGBOARD may be accessed separately. 

Each chip uses the same method of instruction and address/data transmission. At the beginning of 

this section, we mentioned that the only difference between the two sound chips was that each 

had its own "phone number." Therefore, both the Primary Routines and Table Access Routines 

have duplicate sets of code to access each separately. Included in the Primary Routines is another 

set of four subroutines called INIT2, LATCH2, WRITE2 and RESET2. The Table Access 

Routine also has a duplicate set of code labelled in a similar manner.

SIREN SOUND EFFECT 

Type this program right on your demonstration disk. (You may leave out the REM (remark) 

statement, as it serves only to explain the flow of the program.) It is the first sound of a siren. If 

you are using a fresh disk, you must copy the PRIMary Routines and the TABLE Access 

Routine onto your disk and run them either before you run the program or within the program 

itself. (Delete last line of TABLE.) Also, MOCKINGBOARD must be initialized at the 

beginning, with a CALL 36864 (INIT) and CALL 36908 (INIT2). 

 

5 REM

***DATA FOR SOUND; 145=FINE TUNE; 62=ENABLE;

15=AMPLITUDE

10 DATA 145,0,0,0,0,0,0,62,15,0,0,0,0,0,0,0

18 REM

***STARTING ADDRESS FOR STORAGE OF SOUND DATA

20 A=33024

3-7

 

25 REM

***READ AND STORE ALL VALUES FOR SOUND IN SEQUENTIAL

ORDER STARTING AT LOCATION 33024

***WHEN X=0, IT IS ADDED TO "A" WHICH IS 33024 TO EQUAL

33024. PLACE THE FIRST DATA FROM LINE 10, 145, INTO

LOCATION 33024

30 FOR X=0 TO 15:READ D

40 POKE A+X,D

50 NEXT

75 REM

***USE TEMPORARY LOCATIONS 8 AND 9 TO POINT TO THE

STARTING ADDRESS OF SOUND, 33024; CALL TABLE ACCESS

ROUTINE TO SEND DATA TO MOCKINGBOARD AND PLAY

THE SOUND

80 POKE 8,0:POKE 9,129:CALL 32768

85 REM

***USE DELAY LOOK FOR DURATION OF SOUND

90 FOR T=1 TO 342: NEXT T

145 REM 

***CALL RESET TO STOP THE SOUND AND CLEAR REGISTERS

150 CALL 36897

160 END

 

Save and run this program. Lines 5 through 50 place the set of sound parameters sequentially in 

memory, starting at 33024. Line 80 plays the sound for the period of time designated in line 90. 

Line 150 stops the sound with a CALL TO RESET.

Now, let's add the second part of the siren sound

 

15 DATA 86,1,0,0,0,0,0,62,15,0,0,0,0,0,0,0

30 FOR X=0 TO 31: READ D

100 POKE 8,16:POKE 9,129: CALL 32768

120 FOR T=1 TO 342:NEXT T

 

Line 15 is the second sound data and line 30 is changed to READ 16 more data. Line 100 plays 

the second sound. The temporary locations, 8 and 9,

3-8

are changed to point to the second set of sound data. The Table Access Routine is CALLed to 

send it to MOCKINGBOARD. Line 120 allows us to hear this sound for a given period of time. 

Save and run this program, Did you hear a siren? This program demonstrates two manipulation 

techniques, duration (lines 90 and I 20) and sequencing of two or more sounds (lines 80 through 

120). 

A delay loop follows each note because, otherwise, the notes would alternate too quickly for you 

to hear them. The only difference between the two notes is the tone period registers for channel 

A, 

Refer to the chart on musical notes, Appendix E, page A-6. The first note is a middle or 4th 

octave A with a Tone Period value of 145. The second note falls between F# and G in the third 

octave; it has a Tone Period value of 342 or a coarse tune of 1 and fine tune of 86. The changes 

necessary to create these two tones involve only two registers. Therefore, load the base 

parameters needed to create the notes and change the Tone Period registers as required to alter the 

note. In addition, lines 70 and l40 places the sound generation in a loop so that the sir en will 

play five times. Here's how to do it. 

l0 DATA 0,0,0,0,0,0,0,62,l5,0,0,0,0,0,0,0

20 A=33M4 

30 FOR X = 0 TO l5: READ D

40 POKE A+X,D

50 NEXT

55 REM 

***SET THE POINTERS TO POINT TO LOCATION 33024

60 POKE 8,0: POKE 9,129

65 REM

***REPEAT THE SIEN SEQUENCE FIVE TIMES

70 FOR Z = 1 TO 5

75 REM

***PLAY THE FIRST SOUND

80 POKE 33024,145: P0KE 33025,0:CALL 32768

90 FOR T = 1 TO 342: NEXT T 

3-9

95 REM

***PLAY THE SECOND SOUND. CHANGE FIRST REGISTER TO

86 AND SECOND REGISTER TO 1. SINCE TONE PERIOD

=342, FINE TUNE = 342-INT(342/256)*256 AND COARSE TUNE

TUNE=INT(342/256)

100 POKE 33024,86:POKE 33025,1:CALL 32768

120 FOR T=1 TO 342:NEXT T

135 REM

***IF Z IS LESS THAN 5, PLAY THE SEQUENCE AGAIN

140 NEXT

145 REM

***SHUT THE SOUND OFF

150 CALL 36897

160 END

Now, try this same program, but this time make use of the two sound chips and both speakers. 

The Primary Routines and Table Access Routine have secondary sets of routines to produce 

sounds out of the second speaker with the other sound chip. You will be able to play one tone 

through the left speaker and the other through the right. 

The Table Access Routine uses a temporary memory location to store the beginning address of 

the sound to be played back. This stored address is referred to as a "pointer" because it points to 

where the sound data begins. 

We have already used locations 8 and 9, in our siren example, to store the address for the first 

sound chip. The second sound chip uses Location 10 and 11. The address is divided into high and 

low bytes. 

High byte is calculated by taking the beginning address and dividing it by 256. The resulting 

whole number is stored in location 9 or 11. Low byte is the remainder from the division and is 

stored in location 8 or 10. The siren sound effects program stores the data at 33024. When 

divided by 256, this address equals 129 with no remainder. The 129 is stored in 9 or 11 and 0 is 

stored in 8 or 10.

3-10

To produce the siren sound through both speakers, set the pointer locations, 10 and 11 to 33024. 

The pointer for the first sound chip, 8 and 9, also points to this same address. Both chips may 

utilize data in the same memory location because the data is not affected by use, 

D <= =>POINTER LOC 8, 9 -> SOUND CHIP 1 -> SPEAKER 1

A

T

A < = = >POINTER LOC 10, 11 -> SOUND CHIP 2 -> SPEAKER 2

Change the following lines as indicated: 

62 POKE l0,0: POKE 1l,l29

100 POKE 33024,86:POKE 33025,1

110 CALL 36897:CALL 32796

130 CALL 3694l 

Line 110, the CALL to 36897, is the RESET subroutine (Primary Routine) for the first sound 

chip. This CALL will shut off the first sound chip. If we do not shut off one of the chips, both 

would produce sound at the same time, and we would create a two-note chord. This CALL was 

not necessary in the earlier programs because both notes were generated by one sound chip. The 

second sound wrote over the register values of the first sound. 

Line 100, the CALL 32768, is dropped and picked up in line 110 as CALL 32796, which is the 

Table Access Routine for the second sound chip. It plays the second note through the other 

speaker. Line 130 turns off the second sound with a CALL to RESET2. Note that the pointers 

(8,9 and 10,11) do not have to be POKEd each time with the address of the sound data. The 

sound data has not moved from its location; therefore, its address remains the same. 

10 DATA 0,0,0 0,0,0,0,62,15,0,0,0 0,0,0,0

20 A = 33024

30 FOR X =0 TO l 5: READ D

40 POKE A+ X,D

50 NEXT

55 REM

3-11

***SET BOTH SOUND CHIP POINTERS TO POINT TO

THE ADDRESS OF THE SOUND DATA, 33024.

60 POKE 8,0:POKE 9,129

62 POKE 10,0:POKE 11, 129

70 FOR Z= 1 TO 5

75 REM

***CHANGE THE SOUND DATA IN MEMORY TO THE FIRST

SOUND AND PLAY IT THROUGH THE FIRST SPEAKER WITH

A CALL TO THE TABLE ACCESS ROUTINE. (NOTE THAT

32768 IS THE ROUTINE FOR THE FIRST CHIP.)

80 POKE 33024,145:POKE 33025,0:CALL 32768

90 FOR T = 1 TO 342:NEXT T

95 REM

***CHANGE THE SOUND DATA IN MEMORY TO

THE SECOND SOUND

100 POKE 33024,86:POKE 33025,1

105 REM

***TURN OFF THE FIRST SOUND CHIP WITH A CALL RESET

AND PLAY THE SECOND SOUND THROUGH THE SECOND

SPEAKER WITH A CALL TO THE TABLE ACCESS ROUTINE.

(NOTE 32796 IS THE ROUTINE FOR THE SECOND CHIP.)

110 CALL 36897:CALL 32796

120 FOR T=1 TO 342:NEXT T

125 REM

***CALL RESET2 TO SHUT OFF THE SECOND SOUND CHIP 130 CALL 

36941

135 REM

***IF Z IS LESS THAN 5, PLAY THE SEQUENCE AGAIN

140 NEXT

160 END 

In this last example, one tone of the siren is played through one speaker and the other tone 

through the second speaker. Other variations are also possible. 


***************************************************************************
A-3

APPENDIX A Programmable Sound Generator Registers

 

REGISTER DESCRIPTION DEC HEX

 

R0 FINE TUNE 0-255 00-FF

CHANNEL A TONE PERIOD

R1 COARSE TUNE 0-15 00-0F

 

R2 FINE TUNE 1-255 00-FF

CHANNEL B TONE PERIOD 

R3 COARSE TUNE 0-15 00-0F

 

R4 FINE TUNE 0-255 00-FF

CHANNEL C TONE PERIOD

R5 COARSE TUNE 0-15 00-0F

 

R6 NOISE PERIOD ALL CHANNELS 0-31 00-1F

 

R7 ENABLE NOISE/TONE 0-63 00-3F

 

R8 CHANNEL A AMPLITUDE 0-16 00-10

AMPLITUDE LEVEL

R9 CHANNEL B AMPLITUDE MODE SELECT 0-16 00-10

FIXED=0-15

VARIABLE=16

R10 0-16 00-10

 

R11 FINE TUNE ENVELOPE 0-255 00-FF

 

R12 ENVELOPE PERIOD COARSE TUNE 0-255 00-FF

ENVELOPE

 

R13 ENVELOPE SHAPE/CYCLE CONT: ATTACK:ALT: 0-15 00-0F

HOLD

 

R14 NOT USED REGISTER VALUE NOT SIGNIFICANT

R15 NOT USED REGISTER VALUE NOT SIGNIFICANT

 

A-4

APPENDIX C Noise and Tone Enable Register

(adapted from General Instrument Programmable Sound Generator Data Manual)

REGISTER NOISE TONE REGISTER NOISE TONE

VALUE CHANNEL CHANNEL VALUE CHANNEL CHANNEL

 

DEC

HEX

C

B

A

C

B

A

DEC

HEX

C

B

A

C

B

A

00

00

ON

ON

ON

ON

ON

ON

32

20

-

ON

ON

ON

ON

ON

01

01

ON

ON

ON

ON

ON

-

33

21

-

ON

ON

ON

ON

-

02

02

ON

ON

ON

ON

-

ON

34

22

-

ON

ON

ON

-

ON

03

03

ON

ON

ON

ON

-

-

35

23

-

ON

ON

ON

-

-

04

04

ON

ON

ON

-

ON

ON

36

24

-

ON

ON

-

ON

ON

05

05

ON

ON

ON

-

ON

-

37

25

-

ON

ON

-

ON

-

06

06

ON

ON

ON

-

-

ON

38

26

-

ON

ON

-

-

ON

07

07

ON

ON

ON

-

-

-

39

27

-

ON

ON

-

-

-

08

08

ON

ON

-

ON

ON

ON

40

28

-

ON

-

ON

ON

ON

09

09

ON

ON

-

ON

ON

ON

41

29

-

ON

-

ON

ON

-

10

0A

ON

ON

-

ON

ON

-

42

2A

-

ON

-

ON

-

ON

11

0B

ON

ON

-

ON

-

-

43

2B

-

ON

-

ON

-

-

12

0C

ON

ON

-

-

ON

ON

44

2C

-

ON

-

-

ON

ON

13

0D

ON

ON

-

-

ON

-

45

2D

-

ON

-

-

ON

-

14

0E

ON

ON

-

-

-

ON

46

2E

-

ON

-

-

-

ON

15

0F

ON

ON

-

-

-

-

47

2F

-

ON

-

-

-

-

16

10

ON

-

ON

ON

ON

ON

48

30

-

-

ON

ON

ON

ON

17

11

ON

-

ON

ON

ON

-

49

31

-

-

ON

ON

ON

-

18

12

ON

-

ON

ON

-

ON

50

32

-

-

ON

ON

-

ON

19

13

ON

-

ON

ON

-

-

51

33

-

-

ON

ON

-

-

20

14

ON

-

ON

-

ON

ON

52

34

-

-

ON

-

ON

ON

21

15

ON

-

ON

-

ON

-

53

35

-

-

ON

-

ON

-

22

16

ON

-

ON

-

-

ON

54

36

-

-

ON

-

-

ON

23

17

ON

-

ON

-

-

-

55

37

-

-

ON

-

-

-

24

18

ON

-

-

ON

ON

ON

56

38

-

-

-

ON

ON

ON

25

19

ON

-

-

ON

ON

-

57

39

-

-

-

ON

ON

ON

26

1A

ON

-

-

ON

-

ON

58

3A

-

-

-

ON

-

ON

27

1B

ON

-

-

ON

-

-

59

3B

-

-

-

ON

-

-

28

1C

ON

-

-

-

ON

ON

60

3C

-

-

-

-

ON

ON

29

1D

ON

-

-

-

ON

-

61

3D

-

-

-

-

ON

-

30

1E

ON

-

-

-

-

ON

62

3E

-

-

-

-

-

ON

31

1F

ON

-

-

-

-

-

63

3F

-

-

-

-

-

-

 

A-5

APPENDIX D Envelope Shape Register

(adapted from General Instrument Programmable Sound Generator Data Manual)

 



GRAPHIC REPRESENTATION


REGISTER 08

DEC      08

HEX      08

CONT     ON

ATTK     -
 
ALT      -

HOLD     -


 

 

REGISTER 09

DEC      09

HEX      09

CONT     ON

ATTK     -

ALT      -

HOLD     ON

 

10

 

0A

ON

-

ON

-

 

11

 

0B

ON

-

ON

ON

 

12

 

0C

ON

ON

-

-

 

13

 

0D

ON

ON

-

ON

 

14

 

0E

ON

ON

ON

-

 

15

 

0F

ON

ON

ON

ON

 

 

SHAPE PATTERNS 0-7 ARE ONE CYCLE PATTERNS AND MAY BE REPRESENTED BY 

THE PATTERNS ABOVE. FOR EXAMPLE, SHAPE PATTERN 0 IS A DUPLICATE OF 

PATTERN 9.

00

00

-

-

X

X

 

A-6

APPENDIX E Equal Tempered Chromatic Scale(continued)

(fCLOCK- 1.023 MHz)

TONE PERIOD

NOTE (DEC) (HEX) 

NOTE OCTV FREQ CRSE FINE CRSE FINE 

C

1

32.703

7

163

07

A3

C#

1

34.648

7

53

07

35

D

1

36.708

6

205

06

CD

D#

1

38.891

6

108

06

6C

E

1

41.203

6

15

06

0F

F

1

43.654

5

184

05

B8

F#

1

46.249

5

102

05

66

G

1

48.999

5

24

05

18

G#

1

51.913

4

207

04

CF

A

1

55.000

4

138

04

8A

A#

1

58.270

4

73

04

49

B

1

61.735

4

11

04

0B

C

2

65.406

3

209

03

D1

C#

2

69.296

3

154

03

9A

D

2

73.416

3

102

03

66

D#

2

77.782

3

54

03

36

E

2

82.406

3

7

03

07

F

2

87.308

2

220

02

DC

F#

2

92.498

2

179

02

B3

G

2

97.998

2

140

02

8C

G#

3

103.826

2

103

02

67

A

3

110.000

2

69

02

45

A#

3

116.540

2

36

02

24

B

3

123.470

2

5

02

05

C

3

130.812

1

232

01

E8

C#

3

138.592

1

205

01

CD

D

3

146.832

1

179

01

B3

D#

3

155.564

1

155

01

9B

E

3

164.812

1

131

01

83

F

3

174.616

1

110

01

6E

F#

3

184.996

1

89

01

59

G

3

195.996

1

70

01

46

 

 

 

 

 

 

 

 

 

 

 

 

A-7

APPENDIX E Equal Tempered Chromatic Scale(continued)

(fCLOCK- 1.023 MHz)

(adapted from General Instrument Programmable Sound Generator Data Manual)

TONE PERIOD

NOTE (DEC) (HEX) 

NOTE OCTV FREQ CRSE FINE CRSE FINE 

G#

3

207.652

1

51

01

33

A

3

220.000

1

34

01

22

A#

3

233.080

1

18

01

12

B

3

246.940

1

2

01

02

C

4

261.624

0

244

00

F4

C#

4

277.184

0

230

00

E6

D

4

293.664

0

217

00

D9

D#

4

311.128

0

205

00

CD

E

4

329.624

0

193

00

C1

F

4

349.232

0

183

00

B7

F#

4

369.992

0

172

00

AC

G

4

391.992

0

163

00

A3

G#

4

415.304

0

153

00

99

A

4

440.000

0

145

00

91

A#

4

466.160

0

137

00

89

B

4

493.880

0

129

00

81

C

5

523.248

0

122

00

7A

C#

5

554.368

0

115

00

73

D

5

587.328

0

108

00

6C

D#

5

622.256

0

102

00

66

E

5

659.248

0

96

00

60

F

5

698.464

0

91

00

58

F#

5

739.984

0

86

00

56

G

5

783.984

0

81

00

51

G#

5

830.608

0

76

00

4C

A

5

880.000

0

72

00

48

A#

5

932.320

0

68

00

44

B

5

987.760

0

64

00

40

C

6

1046.496

0

61

00

3D

C#

6

1108.736

0

57

00

39

D

6

1174.656

0

54

00

36

D#

6

1244.512

0

51

00

33

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A-8

APPENDIX E Equal Tempered Chromatic Scale(continued)

(fCLOCK- 1.023 MHz)

(adapted from General Instrument Programmable Sound Generator Data Manual)

TONE PERIOD

NOTE (DEC) (HEX) 

NOTE OCTV FREQ CRSE FINE CRSE FINE 

E

6

1318.496

0

48

00

30

F

6

1396.928

0

45

00

2D

F#

6

1479.968

0

43

00

2B

G

6

1567.968

0

40

00

2B

G#

6

1661.216

0

38

00

26

A

6

1760.000

0

36

00

24

A#

6

1864.640

0

34

00

22

B

6

1975.520

0

32

00

20

C

7

2092.992

0

30

00

1E

C#

7

2217.472

0

28

00

1C

D

7

2349.312

0

27

00

1B

D#

7

2489.024

0

25

00

19

E

7

2636.992

0

24

00

18

F

7

2793.856

0

22

00

16

F#

7

2959.936

0

21

00

15

G

7

3135.936

0

20

00

14

G#

7

3322.432

0

19

00

13

A

7

3520.000

0

18

00

12

A#

7

3729.280

0

17

00

11

B

7

3951.040

0

16

00

10

C

8

4185.984

0

15

00

0F

C#

8

4434.944

0

14

00

0E

D

8

4698.624

0

13

00

0D

D#

8

4978.048

0

12

00

0C

E

8

5273.984

0

12

00

0C

F

8

5587.712

0

11

00

0B

F#

8

5919.872

0

10

00

0A

G

8

6271.872

0

10

00

0A

G#

8

6644.864

0

9

00

09

A

8

7040.000

0

9

00

09

A#

8

7458.560

0

8

00

08

B

8

7902.080

0

8

00

08


 

 

 




 
